1. let和var有什么区别？说出你的理解。
作用域不一样，var是函数作用域，而let是块作用域.let不能在定义之前访问该变量，但是var是可以。 let不能被重新定义，但是var是可以的

2. 阅读如下两个代码，分析输出，并说明为什么。
第一个代码输出十次，最后得到10，变量i是let声明的，当前的i只在本轮循环有效，所以每一次循环的i其实都是一个新的变量，所以最后输出的是10
而第二个代码是依次输出0-9，变量i是var命令声明的，在全局范围内都有效，所以全局只有一个变量i。每一次循环，变量i的值都会发生改变。

3. 阅读如下代码，分析输出，并说明为什么。
代码输出错误，结果是undefined，因为let只是块作用域，声明的变量只能在块内访问到。所以if块外的输出没有值。

```js
if (true) {
	let i = 0;
}
console.log(i); // 输出？
```

4. 阅读如下代码，分析输出，并说明为什么。
代码分别输出 10  undefined  11  7  报错undefined;


```js
let i = 6;

function f() {
	let j = 10;
	b();
	c();

	function b() {
		let k = 88;
		console.log(j); // 输出？
		j = 11;
	}

	function c() {
		console.log(typeof k); // 输出？
		i = 7;
		console.log(j); // 输出？
	}
}
f();
console.log(i); // 输出？
console.log(j); // 输出？
```